#ifndef _TAST_HPP
#define _TAST_HPP

#include <iostream>
#include "Event.hpp"

class Reactor;

class Task
{
    Event* _evp;
  public:
    Task(Event* evp = nullptr)
      :_evp(evp)
    {}

    void ProcessOn()
    {
            Reactor* R = _evp->_R;
            // 通过map映射找到对应的Event*
            uint32_t cmd = _evp->_event.events;
            Reactor* r = _evp->_R;
            std::unordered_map<int, Event*>& _events_map = r->__events_map;
            // 错误事处理件
            if(cmd & EPOLLERR) cmd |= (EPOLLIN | EPOLLOUT);
            // 挂起事件处理
            if(cmd & EPOLLHUP) cmd |= (EPOLLIN | EPOLLOUT);

            // 读事件处理
            if(cmd & EPOLLIN)
            {
                if(_events_map.find(event->_sock) != _events_map.end() && event->_recv)
                {
                    fprintf(stdout, "有读事件到来!\n");
                    event->_recv(event);
                }
            }

            // 写事件处理
            if(cmd & EPOLLOUT)
            {
                fprintf(stdout, "有写事件到来!\n");
                if(_events_map.find(event->_sock) != _events_map.end() && event->_send)
                {
                  event->_send(event);
                }
            }
        
    }

    ~Task(){}
};

#endif
